package com.grupobbva.iici.dao.impl;

import java.io.Serializable;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.springframework.stereotype.Repository;

import com.grupobbva.iici.dao.BitacoraDAO;
import com.grupobbva.iici.serializable.Bitacora;
import com.grupobbva.iici.serializable.Corporativa;
import com.grupobbva.iici.util.ConstantesUtil;
import com.grupobbva.iici.util.FiltroDTO;

@Repository
public class BitacoraDAOImpl extends BaseDAOImpl implements BitacoraDAO,Serializable{

private static final long serialVersionUID = 1L;
	
	@SuppressWarnings("unused")
	private static Logger log = Logger.getLogger(CommonDAOImpl.class);

//	@Override
	public List<Bitacora> buscarBitacora(FiltroDTO filtroDTO) {
		FiltroDTO filtroBitacora=new FiltroDTO();
		filtroBitacora.addParametro("codMult", ConstantesUtil.ESTADO_BITACORA_COD);		
		List<Corporativa> lstEstado=obtenerEntidadesPorFiltros(Corporativa.class, filtroBitacora);
		
		String hql=" select b from Bitacora b where b.scheduler.idScheduler=:idScheduler" +
				" and trunc(b.fechaInicio)>=:fechaInicio and trunc(b.fechaInicio)<=:fechaFin ";
		if(filtroDTO.getParametro("idEstado")!=null&&!"".equals(filtroDTO.getParametro("idEstado"))){
			hql+=" and idEstado=:idEstado";
		}
		hql+=" order by b.fechaInicio desc";
		Query query=getSession().createQuery(hql);
		query.setParameter("idScheduler", filtroDTO.getParametro("idScheduler"));
		query.setParameter("fechaInicio", filtroDTO.getParametro("fechaInicio"));
		query.setParameter("fechaFin"   , filtroDTO.getParametro("fechaFin"));
		if(filtroDTO.getParametro("idEstado")!=null&&!"".equals(filtroDTO.getParametro("idEstado"))){
			query.setParameter("idEstado",filtroDTO.getParametro("idEstado"));
		}
		List<Bitacora> lstBitacora=query.list();
		for(Bitacora bitacora:lstBitacora){
			String multitabla	= bitacora.getIdEstado().substring(0,3);
			String elemento		= bitacora.getIdEstado().substring(3,bitacora.getIdEstado().length());
			Corporativa corporativa=new Corporativa(multitabla,elemento);
			int index=lstEstado.indexOf(corporativa);
			if(index>=0){
				bitacora.setEstado(lstEstado.get(index));
			}
		}
		
		return lstBitacora;
	}
	
}
